<?php
	class Admincp_UserController extends Main_Controller_Action
	{
		private $_arrParam;
		private $_model;
		private $_validate;
		
		public function init()
		{
			$this->loadTemplates('admin');
			$this->view->headTitle('Quản lý tài khoản');
			$this->_arrParam = $this->_request->getParams();
			$this->_model = new Admincp_Model_User();
			$this->_validate = new Admincp_Form_ValidateUser();
		}
		
		public function preDispatch()
		{
		    $auth = Zend_Auth::getInstance();
		    if(!$auth->hasIdentity()) {
		        if($this->_request->getActionName() != 'login')
		            $this->_redirect('admincp/index/login');
		    }
		}
		
		public function indexAction()
		{
			$adapter = new Zend_Paginator_Adapter_DbSelect($this->_model->listUser());
			$paginator = new Zend_Paginator($adapter);
			$paginator->setItemCountPerPage(40);
			$paginator->setPageRange(5);
			$currentPage = $this->_request->getParam('page', 1);
			$paginator->setCurrentPageNumber($currentPage);
			$this->view->data = $paginator;
			$this->view->total = $paginator->getTotalItemCount();
			
			if($_POST['add']) {
			    $this->_redirect('admincp/user/create');
			}
			if($_POST['delete']) {
			    $listId = $this->_arrParam['check'];
			    $this->_model->deleteMultiUser($listId);
			    $this->_redirect($_SERVER['HTTP_REFERER']);
			}
		}
		
		public function createAction()
		{
		    if($this->_request->isPost()) {
		        $strTrim      = new Zend_Filter_StringTrim();
		        $username     = strtolower($strTrim->filter(strip_tags($this->_arrParam['username'])));
		        $password     = $strTrim->filter(strip_tags($this->_arrParam['password']));
		        $rePassword   = $strTrim->filter(strip_tags($this->_arrParam['rePassword']));
		        $fullname     = $strTrim->filter(strip_tags($this->_arrParam['fullname']));
		        $email        = strtolower($strTrim->filter(strip_tags($this->_arrParam['email'])));
		        $flag = true;
		        
		        if($this->_validate->validUsername($username)) {
		            $this->view->usernameValue = $username;
		        }
		        else {
		            $this->view->errorUsername = 'Tên đăng nhập có độ dài từ 6-50 kí tự (a-z, 0-9, _ và .)';
		            $flag = false;
		        }
		        if(!$this->_validate->validPassword($password)) {
		            $this->view->errorPassword = 'Mật khẩu có độ dài từ 6-50 kí tự';
		            $flag = false;
		        }
		        if(!$this->_validate->validPassword($rePassword)) {
		            $this->view->errorRePassword = 'Mật khẩu có độ dài từ 6-50 kí tự';
		            $flag = false;
		        }
		        if($password != $rePassword) {
		            $this->view->errorRePassword = 'Mật khẩu không trùng khớp';
		            $flag = false;
		        }
		        if($this->_validate->validFullname($fullname)) {
		            $this->view->fullnameValue = $fullname;
		        }
		        else {
		            $this->view->errorFullname = 'Tên đầy đủ từ 1-50 kí tự chữ cái hoặc số';
		            $flag = false;
		        }
		        if($this->_validate->validEmail($email)) {
                    $this->view->emailValue = $email;
		        }
		        else {
		            $this->view->errorEmail = 'Email phải đúng định dạng';
		            $flag = false;
		        }
		        if($this->_model->checkUser(null, $username) == 0) {
		            $this->view->usernameValue = $username;
		        }
		        else {
		            $this->view->errorUsername = 'Tên đăng nhập này đã tồn tại';
		            $flag = false;
		        }
		        if($this->_model->checkEmail(null, $email) == 0) {
		            $this->view->emailValue = $email;
		        }
		        else {
		            $this->view->errorEmail = 'Địa chỉ email này đã tồn tại';
		            $flag = false;
		        }
		        
		        if($flag == true) {
		            $strFlex = new Zendvn_Filter_RemoveCircumflex();
		            $code = time() . mt_rand(5, 99999999);
		            $data = array(
		                'username'=>$username,
		                'password'=>$this->genPassword($password),
		                'fullname'=>$fullname,
		                'email'=>$email,
		                'code'=>$code,
		                'status'=>1,
		                'fullname_plaintext'=>strtolower($strFlex->filter($fullname)),
		            );
		            $this->_model->createUser($data);
		            $this->_redirect('admincp/user');
		        }
		    }
		}
		
		public function editAction()
		{
		    $id = (int) $this->_arrParam['id'];
		    $this->view->data = $this->_model->getUserById($id);
		    
		    if($this->_request->isPost()) {
		        $strTrim = new Zend_Filter_StringTrim();
		        $username = strtolower($strTrim->filter(strip_tags($this->_arrParam['username'])));
		        $fullname = $strTrim->filter(strip_tags($this->_arrParam['fullname']));
		        $email = strtolower($strTrim->filter(strip_tags($this->_arrParam['email'])));
		        $status = (int) $this->_arrParam['status'];
		        $flag = true;
		        
		        if(!$this->_validate->validUsername($username)) {
		            $this->view->errorUsername = 'Tên đăng nhập có độ dài từ 6-50 kí tự (a-z, 0-9, _ và .)';
		            $flag = false;
		        }
		        if($this->_model->checkUser($id, $username) > 0) {
		            $this->view->errorUsername = 'Tên đăng nhập này đã tồn tại';
		            $flag = false;
		        }
		        if(!$this->_validate->validFullname($fullname)) {
		            $this->view->errorFullname = 'Tên đầy đủ từ 1-50 kí tự chữ cái hoặc số';
		            $flag = false;
		        }
		        if(!$this->_validate->validEmail($email)) {
		            $this->view->errorEmail = 'Email phải đúng định dạng';
		            $flag = false;
		        }
		        if($this->_model->checkEmail($id, $email) > 0) {
		            $this->view->errorEmail = 'Địa chỉ email này đã tồn tại';
		            $flag = false;
		        }
		        
		        if($flag == true) {
		            $password = $strTrim->filter(strip_tags($this->_arrParam['password']));
		            $rePassword = $strTrim->filter(strip_tags($this->_arrParam['rePassword']));
		            $code = time() . mt_rand(5, 99999999);
		            $strFlex = new Zendvn_Filter_RemoveCircumflex();
		            
		            if(($password != '')||($rePassword != '')) {
		                if(!$this->_validate->validPassword($password)) {
		                    $this->view->errorPassword = 'Mật khẩu có độ dài từ 6-50 kí tự';
		                    $flag = false;
		                }
		                if(!$this->_validate->validPassword($rePassword)) {
		                    $this->view->errorRePassword = 'Mật khẩu có độ dài từ 6-50 kí tự';
		                    $flag = false;
		                }
		                if($password != $rePassword) {
		                    $this->view->errorRePassword = 'Mật khẩu không trùng khớp';
		                    $flag = false;
		                }
		                
		                if($flag == true) {
		                    $data = array(
	                            'username'=>$username,
	                            'password'=>$this->genPassword($password),
	                            'fullname'=>$fullname,
	                            'email'=>$email,
	                            'code'=>$code,
	                            'status'=>$status,
	                            'fullname_plaintext'=>strtolower($strFlex->filter($fullname)),
		                    );
		                }
		            }
		            else {
		                $data = array(
	                        'username'=>$username,
	                        'fullname'=>$fullname,
	                        'email'=>$email,
	                        'code'=>$code,
	                        'status'=>$status,
	                        'fullname_plaintext'=>strtolower($strFlex->filter($fullname)),
		                );
		            }
		            
		            $this->_model->updateUser($data, $id);
		            $this->_redirect('admincp/user');
		        }
		    }
		}

		public function deleteAction()
		{
		    $id = (int) $this->_arrParam['id'];
		    $this->_model->deleteUser($id);
		    $this->_redirect($_SERVER['HTTP_REFERER']);
		}
		
		public function publishAction()
		{
		    $id = (int) $this->_arrParam['id'];
		    $status = (int) $this->_arrParam['status'];
		    $status = ($status == 1) ? 2 : 1;
		    $data = array(
		        'status' => $status,
		    );
		    $this->_model->updateUser($data, $id);
		    $this->_redirect($_SERVER['HTTP_REFERER']);
		}
		
		public function searchAction()
		{
		    $strTrim = new Zend_Filter_StringTrim();
		    $strFlex = new Zendvn_Filter_RemoveCircumflex();
		    $username = strtolower($strTrim->filter($strFlex->filter(strip_tags($this->_arrParam['username']))));
		    $fullname = strtolower($strTrim->filter($strFlex->filter(strip_tags($this->_arrParam['fullname']))));
		    $email = strtolower($strTrim->filter($strFlex->filter(strip_tags($this->_arrParam['email']))));
		    $status = (int) $this->_arrParam['status'];
		    $this->view->keyword = array(
	            'username'=>$username,
	            'fullname'=>$fullname,
	            'email'=>$email,
	            'status'=>$status,
		    );
		    $data = array(
	            'username'=>(string) '%'.str_replace(' ','%',$username).'%',
	            'fullname'=>(string) '%'.str_replace(' ','%',$fullname).'%',
	            'email'=>(string) '%'.str_replace(' ','%',$email).'%',
	            'status'=>$status,
		    );
		    $adapter = new Zend_Paginator_Adapter_DbSelect($this->_model->searchUser($data));
		    $paginator = new Zend_Paginator($adapter);
		    $paginator->setItemCountPerPage(40);
		    $paginator->setPageRange(5);
		    $currentPage = $this->_request->getParam('page', 1);
		    $paginator->setCurrentPageNumber($currentPage);
		    $this->view->data = $paginator;
		    $this->view->total = $paginator->getTotalItemCount();
		}
		
		public function profileAction()
		{
		    $auth = Zend_Auth::getInstance();
		    $infoUser= $auth->getIdentity();
		    $this->view->data = $this->_model->getUserById($infoUser->id);
		    
		    if($this->_request->isPost()) {
		        $strTrim = new Zend_Filter_StringTrim();
		        $fullname = $strTrim->filter(strip_tags($this->_arrParam['fullname']));
		        $email = $strTrim->filter(strtolower(strip_tags($this->_arrParam['email'])));
		        $flag = true;
		        
		        if(!$this->_validate->validFullname($fullname)) {
		            $this->view->errorFullname = 'Tên đầy đủ từ 1-50 kí tự chữ cái hoặc số';
		            $flag = false;
		        }
		        if(!$this->_validate->validEmail($email)) {
		            $this->view->errorEmail = 'Email phải đúng định dạng';
		            $flag = false;
		        }
		        if($this->_model->checkEmail($infoUser->id, $email) > 0) {
		            $this->view->errorEmail = 'Địa chỉ email này đã tồn tại';
		            $flag = false;
		        }
		        
		        if($flag == true) {
		            $strFlex = new Zendvn_Filter_RemoveCircumflex();
		            $code = time() . mt_rand(5, 99999999);
		            $data = array(
		                'fullname'=>$fullname,
		                'email'=>$email,
		                'code'=>$code,
		                'fullname_plaintext'=>strtolower($strFlex->filter($fullname)),
		            );
		            $this->_model->updateUser($data, $infoUser->id);
		            $this->_redirect('admincp/user/success');
		        }
		    }
		}
		
		public function changepasswordAction()
		{
		    if($this->_request->isPost()) {
		        $auth = Zend_Auth::getInstance();
		        $infoUser= $auth->getIdentity();
		        $this->view->data = $infoUser;
		        $strTrim = new Zend_Filter_StringTrim();
		        $oldPassword = $strTrim->filter($this->_arrParam['oldPassword']);
		        $password = $strTrim->filter($this->_arrParam['password']);
		        $rePassword = $strTrim->filter($this->_arrParam['rePassword']);
		        $flag = true;
		        
		        if(!$this->_validate->validPassword($oldPassword)) {
		            $this->view->errorOldPassword = 'Mật khẩu cũ có độ dài 6-50 kí tự';
		            $flag = false;
		        }
		        if(!$this->_validate->validPassword($password)) {
		            $this->view->errorPassword = 'Mật khẩu mới có độ dài 6-50 kí tự';
		            $flag = false;
		        }
		        if(!$this->_validate->validPassword($rePassword)) {
		            $this->view->errorRePassword = 'Nhập lại mật khẩu mới có độ dài 6-50 kí tự';
		            $flag = false;
		        }
		        if($password != $rePassword) {
		            $this->view->errorRePassword = 'Mật khẩu mới không trùng khớp';
		            $flag = false;
		        }
		        if($this->_model->checkPassword($infoUser->id, $this->genPassword($oldPassword)) == 0) {
		            $this->view->errorOldPassword = 'Mật khẩu cũ không chính xác';
		            $flag = false;
		        }
		        
		        if($flag == true) {
		            $data = array(
		                'password'=>$this->genPassword($password),
		            );
		            $this->_model->updateUser($data, $infoUser->id);
		            $this->_redirect('admincp/user/success');
		        }
		    }
		}
		
		public function successAction()
		{
		    $this->_helper->layout->setLayout('success');
		}
		
		public function genPassword($password)
		{
		    return md5('tivi'.$password);
		}
	}
